//引入之前创建好的axios实例
import { request } from "./index";
// 引入nprogress模块
import nprogress from "nprogress";
// 引入nprogress模块的css样式
import "nprogress/nprogress.css";
//引入创建store仓库(之前放在main入口文件内只是相当于给所有的实例注入$store,这里引入其实就是引入一个$store对象而已)
import store from "@/store";

// 设置请求拦截器(在请求之后,服务端收到之前对数据进行筛选配置)
request.interceptors.request.use((config) => {
	//发送请求就会开启进度条
	nprogress.start();
	//获取用户临时身份信息的值,然后随着header的[userTempId]字段发送
	let userTempId = store.state.user.userTempId;
	config.headers.userTempId = userTempId;

	//如果用户登录了,我们需要在header中携带token(用来请求后端数据时进行鉴权操作)
	const token = store.state.user.token;
	config.headers.token = token;
	return config;
});

// 设置响应拦截器(在响应之后,客户端接收之前对响应回来的数据进行筛选配置)
request.interceptors.response.use(
	(response) => {
		// console.log(response, "response");
		// 进入响应拦截器就关闭进度条
		nprogress.done();

		//因为请求成功不代表是我们需要的结果,我们需要的结果是后端返回的数据中,code也是200的时候(200不是状态码,而且后端设置的一种语义化的隐晦提示,示意数据正确)
		if (response.data.code === 200) {
			return response.data.data;
		} else {
			//如果成功响应的结果不是我们想要的,我们需要响应一个失败的promise实例,供请求的地方处理
			//因为所有的错误对象都有一个message的属性,为了方便统一处理,我们抛出错误的时候也把错误包装成一个对象,内部有message属性
			return Promise.reject({ message: response.data.message });
		}
	},
	(error) => {
		nprogress.done();
		return Promise.reject(error);
	}
);

export default request;
